test-rollsum: Process all input, print more statistics
authorColin Walters <walters@verbum.org>
Tue, 24 Jun 2014 11:58:13 +0000 (07:58 -0400)
committerGiuseppe Scrivano <gscrivan@redhat.com>
Thu, 18 Dec 2014 11:48:47 +0000 (12:48 +0100)
Copying the bup code, we need to loop over all chunks even after
hitting the rollsum returning 0.

Also print more statistics.

src/libostree/ostree-repo-pull.c
tests/test-rollsum.c

index ada302bc00445fea3b1ccd3c46d06c8813a3188f..1d767c89af0546fcb3f7d0e7b3f01c3306ffa5a5 100644 (file)
@@ -1996,6 +1996,7 @@ ostree_repo_pull_with_options (OstreeRepo             *self,
                              shift == 1 ? "B" : "KiB",
                              pull_data->n_fetched_deltaparts,
                              (guint) ((end_time - pull_data->start_time) / G_USEC_PER_SEC));
+
       ostree_async_progress_set_status (pull_data->progress, msg);
     }
 
index f33ec2bb0bc70cc54cd1af3e5db82f63852de6c1..1b9174cc4cd22ae65afd404429588242822b5a89 100644 (file)
@@ -31,17 +31,27 @@ rollsum_checksums_for_data (GBytes     *bytes)
 {
   const guint8 *start;
   gsize len;
+  gboolean rollsum_end = FALSE;
   GPtrArray *ret = g_ptr_array_new_with_free_func ((GDestroyNotify)g_variant_unref);
 
   start = g_bytes_get_data (bytes, &len);
-  while (TRUE)
+  while (len > 0)
     {
       int offset, bits;
-      offset = bupsplit_find_ofs (start, MIN(G_MAXINT32, len), &bits); 
-      if (offset == 0)
-        break;
-      if (offset > BLOB_MAX)
-        offset = BLOB_MAX;
+      if (!rollsum_end)
+        {
+          offset = bupsplit_find_ofs (start, MIN(G_MAXINT32, len), &bits); 
+          if (offset == 0)
+            {
+              rollsum_end = TRUE;
+              offset = MIN(BLOB_MAX, len);
+            }
+          else if (offset > BLOB_MAX)
+            offset = BLOB_MAX;
+        }
+      else
+        offset = MIN(BLOB_MAX, len);
+
       {
         gs_free char *blobcsum =
           g_compute_checksum_for_data (G_CHECKSUM_SHA256,
@@ -103,6 +113,7 @@ main (int argc, char **argv)
         {
           guint j;
           gs_unref_ptrarray GPtrArray *rollsums = NULL;
+          guint64 this_rollsum_size = 0;
 
           path = g_file_new_for_path (argv[i]);
           bytes = gs_file_map_readonly (path, cancellable, error);
@@ -126,9 +137,11 @@ main (int argc, char **argv)
                   g_hash_table_add (sums, g_strdup (csum));
                   rollsum_size += ofs;
                 }
+              this_rollsum_size += ofs;
             }
+          g_print ("input: rollsum size: %" G_GUINT64_FORMAT "\n", this_rollsum_size);
         }
-      g_print ("rollsums:%u input:%" G_GUINT64_FORMAT " output: %" G_GUINT64_FORMAT " speedup:%f\n",
+      g_print ("rollsum total:%u input:%" G_GUINT64_FORMAT " output: %" G_GUINT64_FORMAT " speedup:%f\n",
                g_hash_table_size (sums), input_size, rollsum_size,
                (((double)(input_size+1)) / ((double) rollsum_size + 1)));
     }